package cn.techaction.service.Impl;

import java.util.Date;
import java.util.UUID;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.techaction.common.SverResponse;
import cn.techaction.dao.ActionUserDao;
import cn.techaction.pojo.User;
import cn.techaction.service.ActionUserService;
import cn.techaction.utils.ConstUtil;
import cn.techaction.utils.MD5Util;
import cn.techaction.utils.TokenCache;
import cn.techaction.vo.ActionUserVo;

@Service
public class ActionUserServiceImpl implements ActionUserService{
	@Autowired
	private ActionUserDao actionUserDao;
	
	/*用户登录*/
	@Override
	public SverResponse<User> doLogin(String account, String password) {
		// TODO Auto-generated method stub
		//1.判断用户名是否存在
		int rs=actionUserDao.checkUserByAccount(account);
		System.out.println("rs="+rs);
		if(rs==0) {
			return SverResponse.createByErrorMessage("用户不存在！");
		}
		//2.根据用户名和密码查找用户 (密码加密)
		String md5pwd=MD5Util.MD5Encode(password, "utf-8", false);
		User user=actionUserDao.findUserByAccountAndPassword(account, md5pwd);
		//3.判断查找的用户是否存在
		if(user==null) {
			return SverResponse.createByErrorMessage("密码错误！");
		}
		//置空密码，防止泄密
		user.setPassword(StringUtils.EMPTY);
		return SverResponse.createRespBySuccess("登录成功！",user);
	}
	
	/*用户注册*/
	@Override
	public SverResponse<String> doRegister(User user) {
		// 检查用户名是否存在
		SverResponse<String> resp=checkValidation(user.getAccount(),ConstUtil.TYPE_ACCOUNT);
		if(!resp.isSuccess()) {
			return resp;
		}
		//检查邮箱是否被注册
		resp=checkValidation(user.getEmail(),ConstUtil.TYPE_EMAIL);
		if(!resp.isSuccess()) {
			return resp;
		}
		//指定用户角色 通过前端注册的用户都为普通用户而不是管理员
		user.setRole(ConstUtil.Role.ROLE_CUSTOMER);
		//将密码进行加密
		user.setPassword(MD5Util.MD5Encode(user.getPassword(),"utf-8",false));
		//执行注册
		Date curDate=new Date();
		user.setCreate_time(curDate);
		user.setUpdate_time(curDate);
		System.out.println(user.getQuestion());
		System.out.println(user.getAsw());
		int rs=actionUserDao.insertUser(user);
		if(rs==0) {
			return SverResponse.createByErrorMessage("注册失败！");
		}
		return SverResponse.createRespBySuccessMessage("注册成功");
	}
	
	
	@Override
	public SverResponse<String> checkValidation(String str, String type) {
		// TODO Auto-generated method stub
		//判断我们的字符串不为空type
		if(StringUtils.isNoneBlank(type)) {
			if(ConstUtil.TYPE_ACCOUNT.equals(type)) {
				int rs=actionUserDao.checkUserByAccount(str);
				if(rs>0) {
					return SverResponse.createByErrorMessage("用户名已经存在");
				}
			}
		}
		if(StringUtils.isNoneBlank(type)) {
			if(ConstUtil.TYPE_EMAIL.equals(type)) {
				int rs=actionUserDao.checkUserByEmail(str);
				if(rs>0) {
					return SverResponse.createByErrorMessage("Email已经存在");
				}
			}
		}
		if(StringUtils.isNoneBlank(type)) {
			if(ConstUtil.TYPE_PHONE.equals(type)) {
				int rs=actionUserDao.checkUserByPhone(str);
				if(rs>0) {
					return SverResponse.createByErrorMessage("电话号码已经存在");
				}
			}
		}else {
			return SverResponse.createByErrorMessage("信息验证类别错误！");
		}
		return SverResponse.createRespBySuccessMessage("信息验证成功");
	}
	
	/*修改用户信息*/
	@Override
	public SverResponse<User> updateUserInfo(ActionUserVo userVo) {
		// TODO Auto-generated method stub
		//根据id获得我们的user对象
		User updateUser=actionUserDao.findUserById(userVo.getId());
		//更新修改我们的数据
		updateUser.setAccount(userVo.getAccount());
		updateUser.setEmail(userVo.getEmail());
		updateUser.setPhone(userVo.getPhone());
		updateUser.setUpdate_time(new Date());
		updateUser.setAge(userVo.getAge());
		//判断男女
		if(userVo.getSex().equals("男")) {
			updateUser.setSex(1);
		}else {
			updateUser.setSex(0);
		}
		updateUser.setName(userVo.getName());
		int rs=actionUserDao.updateUserInfo(updateUser);
		if(rs>0) {
			return SverResponse.createRespBySuccess("用户信息修改成功！",updateUser);
		}
		return SverResponse.createByErrorMessage("用户信息修改失败");
	}
	
	
	@Override
	public SverResponse<User> findUserByAccount(String account) {
		// TODO Auto-generated method stub
		User user=actionUserDao.findUserByAccount(account);
		//3.判断查找的用户是否存在
		if(user==null) {
			return SverResponse.createByErrorMessage("用户名错误");
		}
		//置空密码
		user.setPassword(StringUtils.EMPTY);
		//将安全问题答案置空
		user.setAsw(StringUtils.EMPTY);
		return SverResponse.createRespBySuccess(user);
	}
	
	@Override
	//校验用户密保答案
	public SverResponse<String> checkUserAnswer(String account, String question, String asw) {
		// TODO Auto-generated method stub
		//获取校验结果
		int rs = actionUserDao.checkUserAnswer(account,question,asw);
		if(rs>0) {
			//答案正确生成token
			String token=UUID.randomUUID().toString();
			//放入缓存
			TokenCache.setCacheData(TokenCache.PREFIX+account, token);
			
			return SverResponse.createRespBySuccess(token);
		}
		//
		return SverResponse.createByErrorMessage("问题答案错误");
	}
	@Override
	public SverResponse<String> resetPassword(Integer userId, String password) {
		// TODO Auto-generated method stub
		//密码加密
		String pwd=MD5Util.MD5Encode(password, "utf-8", false);
		//获得user对象
		User user=actionUserDao.findUserById(userId);
		//更新密码
		user.setPassword(pwd);
		user.setUpdate_time(new Date());
		int rs=actionUserDao.updateUserInfo(user);
		if(rs>0) {
			return SverResponse.createRespBySuccessMessage("密码修改成功");
		}
		return SverResponse.createByErrorMessage("密码修改失败");
	}
	/*修改密码*/
	@Override
	public SverResponse<String> updatePassword(User user, String oldpassword, String newpassword) {
		// TODO Auto-generated method stub
		oldpassword=MD5Util.MD5Encode(oldpassword, "utf-8",false);
		int rs=actionUserDao.checkPassword(user.getAccount(),oldpassword);
		if(rs==0) {
			return SverResponse.createByErrorMessage("原始密码错误！");
		}
		//将我们的新密码插入数据库
		newpassword=MD5Util.MD5Encode(newpassword, "utf-8",false);
		user.setPassword(newpassword);
		user.setUpdate_time(new Date());
		rs=actionUserDao.updateUserInfo(user);
		if(rs>0) {
			return SverResponse.createRespBySuccessMessage("密码修改成功！");
			
		}
		return SverResponse.createByErrorMessage("密码修改失败！");
	}


	
	


}
